﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Text;

namespace VCC.Site.Models
{
    public class CaptchaImageResult : ActionResult
    {
        
        public string GetCaptchaString(int length)
        {
            int intZero = '0';
            int intNine = '9';
            int intCount = 0;
            int intRandomNumber = 0;
            string strCaptchaString = "";

            Random random = new Random(System.DateTime.Now.Millisecond);

            while (intCount < length)
            {
                intRandomNumber = random.Next(intZero, intNine);
                if (((intRandomNumber >= intZero) && (intRandomNumber <= intNine)))
                {
                    strCaptchaString = strCaptchaString + (char)intRandomNumber;
                    intCount = intCount + 1;
                }
            }
            return strCaptchaString;
        }
        int rrandom = 0;
        int grandom = 0;
        int brandom = 0;
        public Color GetRandomColor()
        {
            Random rnd = new Random();
            int ri = rnd.Next(255);
            if (ri == rrandom)
            {
                ri = rnd.Next(255);
            }
            else
            {
                rrandom = ri;
            }
            int gi = rnd.Next(255);
            if (gi == grandom)
            {
                gi = rnd.Next(255);
            }
            else
            {
                grandom = gi;
            }
            int bi = rnd.Next(255);
            if (bi == brandom)
            {
                bi = rnd.Next(255);
            }
            else
            {
                brandom = bi;
            }
            byte r = Convert.ToByte(ri);
            byte g = Convert.ToByte(gi);
            byte b = Convert.ToByte(bi);
            return Color.FromArgb(r, g, b);
        }


        public override void ExecuteResult(ControllerContext context)
        {
            const byte LENGTH = 5;
            const string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
            Bitmap bmp = new Bitmap(180, 60);
            Graphics g = Graphics.FromImage(bmp);
            // Tạo nền cho ảnh dạng sóng
            HatchBrush brush = new HatchBrush(HatchStyle.Percent80, Color.White, Color.Tan);
            g.FillRegion(brush, g.Clip);
            // Lưu chuỗi captcha trong quá trình tạo
            StringBuilder strCaptcha = new StringBuilder();
            Random rand = new Random();
            float locationX = 3;
            for (int i = 0; i < LENGTH; i++)
            {
                // Lấy kí tự ngẫu nhiên từ mảng chars
                SolidBrush brushes = new SolidBrush(GetRandomColor());
                string str = chars[rand.Next(chars.Length)].ToString();
                strCaptcha.Append(str);
                // Tạo font với tên font ngẫu nhiên chọn từ mảng fonts
                Font font = new Font("Times New Roman", new Random().Next(20, 25), FontStyle.Bold);
                // Lấy kích thước của kí tự
                SizeF size = g.MeasureString(str, font);
                // Vẽ kí tự đó ra ảnh tại vị trí tăng dần theo i, vị trí top ngẫu nhiên
                g.DrawString(str, font, brushes, locationX, rand.Next(2, 10));
                font.Dispose();
                //định location X
                locationX += size.Width + i;
            }
            context.HttpContext.Session["captchastring"] = strCaptcha.ToString();
            HttpResponseBase response = context.HttpContext.Response;
            response.ContentType = "image/jpeg";
            bmp.Save(response.OutputStream, ImageFormat.Jpeg);
            bmp.Dispose();
        }
    }
}
